There are many programming systems intended for use with the internet (eg java, perl, cgi), but Liberty Basic is unfortunately not one of them. That doesn't need to stop you from harnessing the power of the internet in LB, though!

<hr>

Tcp/Ip
This is the basic way that two computers communicate over the internet. It can be thought of as an instant messenger (eg MSN) conversation between two people. Each computer can send text to the other.

The usual way this is structured is as a client and server system. This can be thought of as like the relationship between a diner and a waiter:

The diner will call the waiter.
>>The client computer connects to the server.
The waiter will ask what he can do for the diner.
>>The server computer sends a response.
The diner asks for a drink.
>>The client computer sends an instruction to the server.
The waiter brings the drink.
>>The server gives a response, for example the web page the client has requested.

The best way to understand this is through an example. The following is a typical http connection:

<code>
Client connects to www.libertybasic.com:80
Server accepts connection
Client sends: GET resources.html
Server sends: <html>
		Liberty BASIC Resources - Bookmark this page!
		There's a lot of cool resources available for Liberty BASIC programmers
(And so on..)
</code>

I hope this demonstrates the nature of the internet. Its not magic, just a few clever techniques!

<hr>

Mesock
MeSock.dll is a way which we can access the internet from LB without the limiting complexity we would otherwise have to wade through. The following functions use dll calls, but you dont need to understand them to use them!

You can get mesock.dll from: http://oregonstate.edu/~reeset/html/other/programs/mesock32.dll
Or it is in the archive that comes with this newsletter.

To begin with, your program will have to use the following command to prepare mesock for use:

>>open "mesock32.dll" for dll as #me

Also, you must make sure that when your program closes, it closes mesock using the following command:

>>close #me

Other than that all you need to do is paste this code at the end of your program.

<code>
Function TCPOpen(address$,Port)
Timeout=1000
calldll #me, "Open", address$ As ptr,_
Port As Long,_
Timeout As Long, re As Long
TCPOpen=re
End Function

Function TCPReceive$(handle)
buffer=4096
all=0
calldll #me, "ReceiveA" ,handle As Long,_
buffer As Long,_
all As Long, re As long
if re<>0 then TCPReceive$ = winstring(re)
End Function

Function TCPPrint(handle,text$)
calldll #me, "PrintA", handle As Long,_
text$ As ptr,re As Long
TCPPrint=re
End Function

Function TCPClose(handle)
calldll #me, "CloseA",handle As Long,_
TCPClose As Long
End Function
</code>

Once you have these vital components, you can make connections to internet servers at will.

<hr>
The Use Of These Functions:

TCPOpen
This must be called to connect to the server computer.
Parameters:
Address ($)  The Servers host address in either domain (www.libertybasic.com) or ip (192.34.65.1)
Port (numeric)  See Below
Returns:
Handle (numeric) - The handle of the connection. This must be stored, as it is used in subsequent commands. 0 returned if failed.

TCPRecieve$
This will return any message that the server has sent back to your computer.
Parameters:
Handle (numeric)  The handle that was returned by TCPOpen.
Returns:
Message ($)  Any message sent by the server.

TCPPrint
This will send a message to the server.
Parameters: 
Handle (numeric)  The handle that was returned by TCPOpen.
Text ($)  The text to send.
Returns:
Success (numeric) - -1 if sucessful

TCPClose
This disconnects from the server.
Parameters: 
Handle (numeric)  The handle that was returned by TCPOpen.


<hr>

Protocols
These are ways which a client can request or send information to a server. It can be thought of as a mini language consisting of a few commands relevant to the purpose of the communication. The best known protocols are:

HTTP  HyperText Transfer Protocol
This is very quick and easy. There is only one major command, GET. The client asks for the file that it wants, and the server sends it. Its as simple as that.
Eg:
Connect to www.libertybasic.com:80
C: GET resources.html
S: <html>
      Liberty BASIC Resources - Bookmark this page!
	There's a lot of cool resources available for Liberty BASIC programmers
(And so on..)

FTP  File Transfer Protocol
This is the alternative to HTTP, usually used for larger files. It is more complex, allowing for logging in, directory listing and other advanced functions.

SMTP  Simple Mail Transfer Protocol
This is the protocol by which email is sent. There are four basic commands, which must be used to send a successful email: HELO; MAIL FROM; RCPT TO; DATA.
Eg:
Connect to smtp.myisp.com:25
S: 220 mail18.svr.pol.co.uk ESMTP Exim 4.14 Fri, 07 Nov 2003 19:52:30 +0000
C: HELO myisp.com 
S: 250 mail18.svr.pol.co.uk Hello modem-2864.buffalo.dialup.pol.co.uk [217.134.75.48]
C: MAIL FROM: <TBI@hotmail.com>
S: 250 OK
C: RCPT TO: <TBI@arro.org.uk>
S: 250 Accepted
C: DATA
S: 354 Enter message, ending with "." on a line by itself
C: SUBJECT: Read this email - I am the subject!
C: Hello,
C: I am the body of the message.
C: 
C: TheBlazingIcicle
C: .
S: 250 OK id=1AICel-00079h-Cc

The SMTP protocol if fairly simple, and you just need to substitute the information you want into the conversation above.

My example program below is a simple smtp client.

POP  Post Office Protocol
This is the protocol used to collect emails from a server. It is also simple, but I will never finish this tutorial if I explain every protocol there is!

<hr>

Ports
You may have noticed that the familiar server name in the previous examples (eg www.libertybasic.com) is suffixed by a number (eg :80). This number is the port of the server. A server can have many ports. The important thing for us is that each protocol has a port that is usually associated with it. (eg http:80 smtp:25) It is normal to write the port after a colon after the servers name.

You must specify which port you want to connect to when you make a connection.

<hr>
Example:
Note that you must paste the functions above into the end of this example as you must into your own programs. 

<code>
'simple smtp client
WindowWidth = 480 : WindowHeight = 500
open "mesock32.dll" for dll as #me

statictext  #main, "To:", 5,5,40,20
statictext  #main, "From:", 5,30,40,20
statictext  #main, "Subject:", 5,55,40,20
button      #main.default, "Send",[send],UL, 345, 420, 105, 25
textbox     #main.to, 50, 5, 350, 20
textbox     #main.fr, 50, 30, 350, 20
textbox     #main.su, 50, 55, 350, 20
texteditor  #main.te, 10, 100, 460, 300

Open "Mesock32.DLL SMTP Demo" for window as #main
print #main, "trapclose [quit]"

wait

[quit]
close #main
close #me
end

[send]
#main.to "!contents? t0$"
#main.fr "!contents? fr$"
#main.su "!contents? su$"
#main.te "!contents? body$"
at=instr(t0$,"@")
server$=right$(t0$,len(t0$)-at)
print "Connecting To Server:"; server$
th = TCPOpen(server$, 25)
print "TCP Handle Opened: ";th
recvd$=TCPReceive$(th)
print "GET: ";recvd$
txt$="HELO "+server$
gosub [put]
txt$="MAIL FROM:<"+fr$+">"
gosub [put]
txt$="RCPT TO:<"+t0$+">"
gosub [put]
txt$="DATA"
gosub [put]
txt$="SUBJECT: "+su$
gosub [put]
txt$=body$
gosub [put]
txt$="."
gosub [put]
wait

[put]
lret = TCPPrint(th, txt$)
print "PUT: ";txt$
recvd$=TCPReceive$(th)
print "GET: ";recvd$
return
</code>

